/**
 * 对象工具函数
 */

/**
 * 安全地复制对象属性，只复制指定的字段
 * @param target 目标对象
 * @param source 源对象
 * @param fields 要复制的字段列表
 */
export function safeAssign<T extends Record<string, any>>(
  target: T,
  source: any,
  fields: (keyof T)[]
): T {
  const result = { ...target }
  
  fields.forEach(field => {
    if (source && source.hasOwnProperty(field)) {
      result[field] = source[field]
    }
  })
  
  return result
}

/**
 * 从对象中提取指定字段
 * @param obj 源对象
 * @param fields 要提取的字段列表
 */
export function pick<T extends Record<string, any>, K extends keyof T>(
  obj: T,
  fields: K[]
): Pick<T, K> {
  const result = {} as Pick<T, K>
  
  fields.forEach(field => {
    if (obj && obj.hasOwnProperty(field)) {
      result[field] = obj[field]
    }
  })
  
  return result
}

/**
 * 检查对象是否包含数字键
 * @param obj 要检查的对象
 */
export function hasNumericKeys(obj: any): boolean {
  if (!obj || typeof obj !== 'object') return false
  
  return Object.keys(obj).some(key => /^\d+$/.test(key))
}
